home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / SoundAndMusic / cmix / Minc / main.m < prev    next >
Text File  |  1991-09-23  |  3KB  |  120 lines

  1. #include    "../H/ugens.h"
  2. #include        <ctype.h>
  3. #include        <stdio.h>
  4. #include     <math.h>
  5. #include        "defs.h"     /* parser */
  6. extern        mixerr;
  7. extern  int   NBYTES;
  8. extern  int   sfd;
  9. extern  double dispatch();
  10.  
  11. /* delete this dummy function when actual performing cmix computation */
  12.  
  13.  
  14. /* parse: points to tree to be executed once yacc gets done */
  15. Tree     program;            
  16.  
  17.                  /*  ug_list MUST be initialized with something...    */
  18. struct    ug_item    ug_head =
  19.     { 0, 0, "" };
  20. struct    ug_item *ug_list = &ug_head;
  21.  
  22. #define CMAX 16     /* allow up to 16 command line args to be passed to subs */
  23. int aargc;
  24. char *aargv[CMAX];  /* this are declared in ugens.h */
  25. char name[NAMESIZE];/* to store file name found by card scanner, accessed by
  26.                        m_open in sound.c */
  27. int interactive;     /* for m to set interactive mode, set from command line
  28.             arg later on */
  29. FILE *fp;
  30.  
  31. main(argc,argv)
  32. char *argv[];
  33. {
  34.     char    buf[256];
  35.     float    p[MAXDISPARGS];
  36.     short    n_args,j;
  37.     char    *malloc(),*bufp,*cp,*infile;
  38.  
  39. /*    fflush(stdout);
  40.     setlinebuf(stderr); /* just to make fprintf faster.  Note that
  41.                 this may not be portable to non BSD 
  42.                 systems */
  43.     /* copy command-line args, if any*/
  44.  
  45.     for(j=1; j<argc; j++) aargv[j-1]=argv[j];
  46.     aargc = argc;
  47.     
  48.  
  49.     /* Now, command-line args will be available to any subroutine
  50.        in aargc; and char *aargv[], (both declared extern in ugens.h)
  51.        parsing is exactly the same then as standard C routine.
  52.        Maximum of CMAX arguments allowed. */
  53.  
  54.     interactive = 1; /* default is interactive mode */
  55.     SR = 0; /* sampling rate set by sf header or commandline */
  56.     fprintf(stderr," ---------> Cmix/%s<----------\n",argv[0]);
  57.     /*
  58.      * "Introduce" functions and stuff to program
  59.      */
  60.     fp = NULL;
  61.  
  62.     if(argc >= 3) {
  63.     while((*++argv)[0] == '-') {
  64.         argc -= 2; /* Take away two args */
  65.         for(cp = argv[0]+1; *cp; cp++) {
  66.             switch(*cp) { /* Grap options */
  67.             case 'f':
  68.                 infile = *++argv;
  69.                 fp = fopen(infile,"r+");
  70.                 if(fp == NULL) {
  71.                     printf("Can't open %s\n",infile);
  72.                     exit(-1);
  73.                     }
  74.                 fprintf(stderr,"Using file %s\n",infile);
  75.                 break;
  76.             default:  
  77.                 printf("don't know about option %c\n",*cp);
  78.                 }
  79.             }
  80.             if(argc == 1) break;
  81.         }
  82.     }
  83.     ug_intro();    /* introduce standard routines */
  84.     profile();    /* introduce user-written routines etc. */
  85.  
  86.     setbuf(stdout, NULL);    /*  Want to see stdout errors    */
  87.  
  88.     /*
  89.      *    The program is read from stdin, but this can be changed
  90.      */
  91.  
  92.     yyparse();    /* create intermediate representation */
  93.     
  94.     if(!interactive) exct(program);
  95.     closesf();
  96.     fprintf(stderr,"--------->Goodbye<---------");
  97. }
  98.  
  99. /*
  100. *   This is the function called be the M-language parser.
  101. *   It in turn calls the standard cmix dispatch function.
  102. */
  103.  
  104. double parse_dispatch(str,args,n)
  105. char *str;
  106. int n;
  107. double args[];
  108. {
  109.     int i1;
  110.     printf ("============================\n");
  111.     printf ("%s:  ",str);
  112.     for (i1=0;i1<n;i1++) {
  113.         printf ("%g ",args[i1]);
  114.     }
  115.     printf ("\n");
  116.     return (dispatch(str,args,n));
  117. };
  118.  
  119. yywrap () {return 1;}
  120.